class Animal {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    sayHi() {
        return "Hello, " + this.name;
    }
}

class Cat extends Animal {
    private age: number;
    constructor(name: string, age: number) {
        // 调用父类的constructor(name)
        // super() ** 必须放在子类的构造函数中第一行
        // super() **调用父类的构造函数
        // super() **必须在子类的构造函数中调用
        // super() **必须在子类的构造函数中调用，且必须在使用this之前调用
        // super() **调用父类的构造函数，并传入参数
        super(name);
        this.age = age;
    }
    sayHi() {
        return "Meow, " + super.sayHi(); // 调用父类的sayHi()
    }
}

const cat = new Cat("Tom", 2); // 输出：Tom